

name_dict = {
    0: {'cfg_otp_flag': {'position': 7, 'length': 8}},
    1: {'trim_iref': {'position': 5, 'length': 6},
        'cfg_vpphon': {'position': 6, 'length': 1},
        'bytel_spare': {'position': 7, 'length': 1}},
    2: {'trim_vpph': {'position': 3, 'length': 4},
        'trim_vbgr_temp': {'position': 7, 'length': 4}},
    3: {'trim_vrefglb': {'position': 3, 'length': 4},
        'trim_vneg': {'position': 7, 'length': 4}},
    4: {'trim_ilmt_reset': {'position': 3, 'length': 4},
        'trim_omoclk': {'position': 7, 'length': 4}},
    5: {'cfg_max_set_pulse_num': {'position': 3, 'length': 4},
        'cfg_max_reset_pulse_num': {'position': 7, 'length': 4}},
    6: {'cfg_max_forming_pulse_num': {'position': 3, 'length': 4},
        'cfg_clk_ready': {'position': 7, 'length': 4}},
    7: {'cfg_write_mode': {'position': 1, 'length': 2},
        'tiref_change': {'position': 6, 'length': 5},
        'cfg_vsl_sw': {'position': 7, 'length': 1}},
    8: {'trim_sa_iref_rd': {'position': 7, 'length': 8}},
    9: {'trim_sa_iref_set': {'position': 7, 'length': 8}},
    10: {'trim_sa_iref_reset': {'position': 7, 'length': 8}},
    11: {'trim_sa_iref_form': {'position': 7, 'length': 8}},
    12: {'trim_read_delay': {'position': 7, 'length': 8}},
    13: {'trim_read_delay': {'position': 3, 'length': 4},
         'trim_sa_ota': {'position': 7, 'length': 4}},
    14: {'trim_vppyrd': {'position': 6, 'length': 7},
         'tm_dis_en_disable': {'position': 7, 'length': 1}},
    15: {'trim_vppy_forming_max': {'position': 5, 'length': 6},
         'cfg_vunsel_sel': {'position': 7, 'length': 2}},
    16: {'trim_vppy_set_max': {'position': 5, 'length': 6},
         'cfg_readen_trim': {'position': 7, 'length': 2}},
    17: {'trim_vppy_reset_max': {'position': 5, 'length': 6},
         'byte11_spare': {'position': 7, 'length': 2}},
    18: {'trim_vppy_forming_step': {'position': 2, 'length': 3},
         'trim_vppy_set_step': {'position': 4, 'length': 2},
         'trim_vppy_reset_step': {'position': 7, 'length': 3}},
    19: {'trim_vppy_forming': {'position': 5, 'length': 6},
         'byte13_spare': {'position': 7, 'length': 2}},
    20: {'trim_vppy_set': {'position': 5, 'length': 6},
         'byte14_spare': {'position': 7, 'length': 2}},
    21: {'trim_vp': {'position': 5, 'length': 6},
         'byte15_spare': {'position': 7, 'length': 2}},
    22: {'trim_vwl_forming': {'position': 5, 'length': 6},
         'cfg_clmt_dis_reset': {'position': 6, 'length': 1},
         'cfg_clmt_dis_set': {'position': 7, 'length': 1}},
    23: {'trim_vwl_set': {'position': 5, 'length': 6},
         'cfg_vnegpmp_set_add1': {'position': 6, 'length': 1},
         'cfg_vnegpmp_set_add2': {'position': 7, 'length': 1}},
    24: {'trim_vwl_reset': {'position': 5, 'length': 6},
         'cfg_vnegpmp_reset_add1': {'position': 6, 'length': 1},
         'cfg_vnegpmp_reset_add2': {'position': 7, 'length': 1}},
    25: {'trim_vwl_read': {'position': 5, 'length': 6},
         'cfg_vnegpmp_forming_add1': {'position': 6, 'length': 1},
         'cfg_vnegpmp_forming_add2': {'position': 7, 'length': 1}},
    26: {'trim_ilmt_set_bit4': {'position': 1, 'length': 1},
         'cfg_slice_mask_en': {'position': 2, 'length': 1},
         'cfg_block_mask_en': {'position': 3, 'length': 1},
         'trim_ilmt_set': {'position': 7, 'length': 4}},
    27: {'trim_clk': {'position': 5, 'length': 6},
         'cfg_wen_delay': {'position': 7, 'length': 2}},
    28: {'tpump_setup': {'position': 7, 'length': 8}},
    29: {'tpump_disch': {'position': 7, 'length': 8}},
    30: {'tsa_ota_saen': {'position': 3, 'length': 4},
         'tsa_saen_cmp': {'position': 7, 'length': 4}},
    31: {'tsa_cmp_lat': {'position': 3, 'length': 4},
         'twl_disch': {'position': 5, 'length': 2},
         'tbsl_disch': {'position': 7, 'length': 2}},
    32: {'tpw_set': {'position': 7, 'length': 8}},
    33: {'tpw_reset': {'position': 7, 'length': 8}},
    34: {'tpw_forming': {'position': 7, 'length': 8}},
    35: {'tpw_set_step': {'position': 4, 'length': 5},
         'tbsl_pre': {'position': 6, 'length': 2},
         'byte23_spare': {'position': 7, 'length': 1}},
    36: {'tpw_reset_step': {'position': 4, 'length': 5},
         'byte24_spare': {'position': 7, 'length': 3}},
    37: {'tpw_forming_step': {'position': 4, 'length': 5},
         'cfg_error_limit': {'position': 6, 'length': 2},
         'byte25_spare': {'position': 7, 'length': 1}},
    38: {'twl_pre': {'position': 4, 'length': 5},
         'byte26_spare': {'position': 7, 'length': 3}},
    39: {'trim_rep2': {'position': 3, 'length': 4},
         'trim_rep3': {'position': 7, 'length': 4}},
    40: {'trim_rep4': {'position': 3, 'length': 4},
         'trim_rep5': {'position': 7, 'length': 4}},
    41: {'tm_pat_icell_sel_bit': {'position': 7, 'length': 8}},
    42: {'tm_icell_sel_byte': {'position': 5, 'length': 6},
         'tm_clk_ext_en': {'position': 6, 'length': 1},
         'tm_vbl_both_dis': {'position': 7, 'length': 1}},
    43: {'tm_vmon_sel': {'position': 3, 'length': 4},
         'tm_vbgrext_en': {'position': 4, 'length': 1},
         'tm_irefsaext_en': {'position': 5, 'length': 1},
         'byte43_spare': {'position': 6, 'length': 1},
         'tm_pmposcon': {'position': 7, 'length': 1}},
    44: {'tm_vnegdis': {'position': 0, 'length': 1},
         'tm_vpphdis': {'position': 1, 'length': 1},
         'tm_vrefvppy2vcc': {'position': 2, 'length': 1},
         'tm_vwl2vcc': {'position': 3, 'length': 1},
         'tm_clkmon': {'position': 4, 'length': 1},
         'tm_pmpclkmon': {'position': 5, 'length': 1},
         'tm_vrefvwl2vcc': {'position': 6, 'length': 1},
         'tm_vrefvppyrd2vdd': {'position': 7, 'length': 1}},
    45: {'tm_sa_out': {'position': 0, 'length': 1},
         'tm_vbl_ext': {'position': 1, 'length': 1},
         'tm_isa_mon': {'position': 2, 'length': 1},
         'tm_iota_mon': {'position': 3, 'length': 1},
         'tm_vblrd_mon': {'position': 4, 'length': 1},
         'tm_ota_cur': {'position': 6, 'length': 2},
         'tm_bypass_reset': {'position': 7, 'length': 1}},
    46: {'tm_icell_en': {'position': 0, 'length': 1},
         'tm_enc_bypass': {'position': 1, 'length': 1},
         'tm_dec_bypass': {'position': 2, 'length': 1},
         'tm_ecc_through': {'position': 3, 'length': 1},
         'tm_ecc_bypass': {'position': 4, 'length': 1},
         'tm_spi_testmode': {'position': 5, 'length': 1},
         'tm_spi_forming': {'position': 6, 'length': 1},
         'tm_spi_otp_addr': {'position': 7, 'length': 1}},
    47: {'tm_ext_int': {'position': 2, 'length': 3},
         'tm_force_setvry_fail': {'position': 3, 'length': 1},
         'tm_force_rstvry_fail': {'position': 4, 'length': 1},
         'tm_ireftrim_sel': {'position': 6, 'length': 2},
         'tm_spi_rdout_en': {'position': 7, 'length': 1}},
    48: {'tm_spi_rd_high_addr': {'position': 7, 'length': 8}},
    49: {'tm_spi_rd_low_addr': {'position': 7, 'length': 8}},
    50: {'tm_actall': {'position': 3, 'length': 4},
         'tm_wldisch': {'position': 4, 'length': 1},
         'tm_wlvss': {'position': 6, 'length': 2},
         'tm_bldisch_dis': {'position': 7, 'length': 1}},
    51: {'tm_rep0': {'position': 3, 'length': 4},
         'tm_rep1': {'position': 7, 'length': 4}},
    52: {'tm_rep2': {'position': 3, 'length': 4},
         'tm_rep3': {'position': 7, 'length': 4}},
    53: {'tm_rep4': {'position': 3, 'length': 4},
         'tm_rep5': {'position': 7, 'length': 4}},
    54: {'tm_spi_fsm_state': {'position': 6, 'length': 7},
         'byte36_spare ': {'position': 7, 'length': 1}},
    55: {'tm_spi_status_reg': {'position': 7, 'length': 8}},

}

name_str_dict = {
    '0': {'cfg_otp_flag': {'position': '7', 'length': '8'}},
    '1': {'trim_iref': {'position': '5', 'length': '6'},
          'cfg_vpphon': {'position': '6', 'length': '1'},
          'bytel_spare': {'position': '7', 'length': '1'}},
    '2': {'trim_vpph': {'position': '3', 'length': '4'},
          'trim_vbgr_temp': {'position': '7', 'length': '4'}},
    '3': {'trim_vrefglb': {'position': '3', 'length': '4'},
          'trim_vneg': {'position': '7', 'length': '4'}},
    '4': {'trim_ilmt_reset': {'position': '3', 'length': '4'},
          'trim_omoclk': {'position': '7', 'length': '4'}},
    '5': {'cfg_max_set_pulse_num': {'position': '3', 'length': '4'},
          'cfg_max_reset_pulse_num': {'position': '7', 'length': '4'}},
    '6': {'cfg_max_forming_pulse_num': {'position': '3', 'length': '4'},
          'cfg_clk_ready': {'position': '7', 'length': '4'}},
    '7': {'cfg_write_mode': {'position': '1', 'length': '2'},
          'tiref_change': {'position': '6', 'length': '5'},
          'cfg_vsl_sw': {'position': '7', 'length': '1'}},
    '8': {'trim_sa_iref_rd': {'position': '7', 'length': '8'}},
    '9': {'trim_sa_iref_set': {'position': '7', 'length': '8'}},
    '10': {'trim_sa_iref_reset': {'position': '7', 'length': '8'}},
    '11': {'trim_sa_iref_form': {'position': '7', 'length': '8'}},
    '12': {'trim_read_delay': {'position': '7', 'length': '8'}},
    '13': {'trim_read_delay': {'position': '3', 'length': '4'},
           'trim_sa_ota': {'position': '7', 'length': '4'}},
    '14': {'trim_vppyrd': {'position': '6', 'length': '7'},
           'tm_dis_en_disable': {'position': '7', 'length': '1'}},
    '15': {'trim_vppy_forming_max': {'position': '5', 'length': '6'},
           'cfg_vunsel_sel': {'position': '7', 'length': '2'}},
    '16': {'trim_vppy_set_max': {'position': '5', 'length': '6'},
           'cfg_readen_trim': {'position': '7', 'length': '2'}},
    '17': {'trim_vppy_reset_max': {'position': '5', 'length': '6'},
           'byte11_spare': {'position': '7', 'length': '2'}},
    '18': {'trim_vppy_forming_step': {'position': '2', 'length': '3'},
           'trim_vppy_set_step': {'position': '4', 'length': '2'},
           'trim_vppy_reset_step': {'position': '7', 'length': '3'}},
    '19': {'trim_vppy_forming': {'position': '5', 'length': '6'},
           'byte13_spare': {'position': '7', 'length': '2'}},
    '20': {'trim_vppy_set': {'position': '5', 'length': '6'},
           'byte14_spare': {'position': '7', 'length': '2'}},
    '21': {'trim_vp': {'position': '5', 'length': '6'},
           'byte15_spare': {'position': '7', 'length': '2'}},
    '22': {'trim_vwl_forming': {'position': '5', 'length': '6'},
           'cfg_clmt_dis_reset': {'position': '6', 'length': '1'},
           'cfg_clmt_dis_set': {'position': '7', 'length': '1'}},
    '23': {'trim_vwl_set': {'position': '5', 'length': '6'},
           'cfg_vnegpmp_set_add1': {'position': '6', 'length': '1'},
           'cfg_vnegpmp_set_add2': {'position': '7', 'length': '1'}},
    '24': {'trim_vwl_reset': {'position': '5', 'length': '6'},
           'cfg_vnegpmp_reset_add1': {'position': '6', 'length': '1'},
           'cfg_vnegpmp_reset_add2': {'position': '7', 'length': '1'}},
    '25': {'trim_vwl_read': {'position': '5', 'length': '6'},
           'cfg_vnegpmp_forming_add1': {'position': '6', 'length': '1'},
           'cfg_vnegpmp_forming_add2': {'position': '7', 'length': '1'}},
    '26': {'trim_ilmt_set_bit4': {'position': '1', 'length': '1'},
           'cfg_slice_mask_en': {'position': '2', 'length': '1'},
           'cfg_block_mask_en': {'position': '3', 'length': '1'},
           'trim_ilmt_set': {'position': '7', 'length': '4'}},
    '27': {'trim_clk': {'position': '5', 'length': '6'},
           'cfg_wen_delay': {'position': '7', 'length': '2'}},
    '28': {'tpump_setup': {'position': '7', 'length': '8'}},
    '29': {'tpump_disch': {'position': '7', 'length': '8'}},
    '30': {'tsa_ota_saen': {'position': '3', 'length': '4'},
           'tsa_saen_cmp': {'position': '7', 'length': '4'}},
    '31': {'tsa_cmp_lat': {'position': '3', 'length': '4'},
           'twl_disch': {'position': '5', 'length': '2'},
           'tbsl_disch': {'position': '7', 'length': '2'}},
    '32': {'tpw_set': {'position': '7', 'length': '8'}},
    '33': {'tpw_reset': {'position': '7', 'length': '8'}},
    '34': {'tpw_forming': {'position': '7', 'length': '8'}},
    '35': {'tpw_set_step': {'position': '4', 'length': '5'},
           'tbsl_pre': {'position': '6', 'length': '2'},
           'byte23_spare': {'position': '7', 'length': '1'}},
    '36': {'tpw_reset_step': {'position': '4', 'length': '5'},
           'byte24_spare': {'position': '7', 'length': '3'}},
    '37': {'tpw_forming_step': {'position': '4', 'length': '5'},
           'cfg_error_limit': {'position': '6', 'length': '2'},
           'byte25_spare': {'position': '7', 'length': '1'}},
    '38': {'twl_pre': {'position': '4', 'length': '5'},
           'byte26_spare': {'position': '7', 'length': '3'}},
    '39': {'trim_rep2': {'position': '3', 'length': '4'},
           'trim_rep3': {'position': '7', 'length': '4'}},
    '40': {'trim_rep4': {'position': '3', 'length': '4'},
           'trim_rep5': {'position': '7', 'length': '4'}},
    '41': {'tm_pat_icell_sel_bit': {'position': '7', 'length': '8'}},
    '42': {'tm_icell_sel_byte': {'position': '5', 'length': '6'},
           'tm_clk_ext_en': {'position': '6', 'length': '1'},
           'tm_vbl_both_dis': {'position': '7', 'length': '1'}},
    '43': {'tm_vmon_sel': {'position': '3', 'length': '4'},
           'tm_vbgrext_en': {'position': '4', 'length': '1'},
           'tm_irefsaext_en': {'position': '5', 'length': '1'},
           'byte43_spare': {'position': '6', 'length': '1'},
           'tm_pmposcon': {'position': '7', 'length': '1'}},
    '44': {'tm_vnegdis': {'position': '0', 'length': '1'},
           'tm_vpphdis': {'position': '1', 'length': '1'},
           'tm_vrefvppy2vcc': {'position': '2', 'length': '1'},
           'tm_vwl2vcc': {'position': '3', 'length': '1'},
           'tm_clkmon': {'position': '4', 'length': '1'},
           'tm_pmpclkmon': {'position': '5', 'length': '1'},
           'tm_vrefvwl2vcc': {'position': '6', 'length': '1'},
           'tm_vrefvppyrd2vdd': {'position': '7', 'length': '1'}},
    '45': {'tm_sa_out': {'position': '0', 'length': '1'},
           'tm_vbl_ext': {'position': '1', 'length': '1'},
           'tm_isa_mon': {'position': '2', 'length': '1'},
           'tm_iota_mon': {'position': '3', 'length': '1'},
           'tm_vblrd_mon': {'position': '4', 'length': '1'},
           'tm_ota_cur': {'position': '6', 'length': '2'},
           'tm_bypass_reset': {'position': '7', 'length': '1'}},
    '46': {'tm_icell_en': {'position': '0', 'length': '1'},
           'tm_enc_bypass': {'position': '1', 'length': '1'},
           'tm_dec_bypass': {'position': '2', 'length': '1'},
           'tm_ecc_through': {'position': '3', 'length': '1'},
           'tm_ecc_bypass': {'position': '4', 'length': '1'},
           'tm_spi_testmode': {'position': '5', 'length': '1'},
           'tm_spi_forming': {'position': '6', 'length': '1'},
           'tm_spi_otp_addr': {'position': '7', 'length': '1'}},
    '47': {'tm_ext_int': {'position': '2', 'length': '3'},
           'tm_force_setvry_fail': {'position': '3', 'length': '1'},
           'tm_force_rstvry_fail': {'position': '4', 'length': '1'},
           'tm_ireftrim_sel': {'position': '6', 'length': '2'},
           'tm_spi_rdout_en': {'position': '7', 'length': '1'}},
    '48': {'tm_spi_rd_high_addr': {'position': '7', 'length': '8'}},
    '49': {'tm_spi_rd_low_addr': {'position': '7', 'length': '8'}},
    '50': {'tm_actall': {'position': '3', 'length': '4'},
           'tm_wldisch': {'position': '4', 'length': '1'},
           'tm_wlvss': {'position': '6', 'length': '2'},
           'tm_bldisch_dis': {'position': '7', 'length': '1'}},
    '51': {'tm_rep0': {'position': '3', 'length': '4'},
           'tm_rep1': {'position': '7', 'length': '4'}},
    '52': {'tm_rep2': {'position': '3', 'length': '4'},
           'tm_rep3': {'position': '7', 'length': '4'}},
    '53': {'tm_rep4': {'position': '3', 'length': '4'},
           'tm_rep5': {'position': '7', 'length': '4'}},
    '54': {'tm_spi_fsm_state': {'position': '6', 'length': '7'},
           'byte36_spare ': {'position': '7', 'length': '1'}},
    '55': {'tm_spi_status_reg': {'position': '7', 'length': '8'}},
}

test_dict = {0: {'cfg_otp_flag': {'position': 7, 'length': 8}},
             1: {'trim_iref': {'position': 5, 'length': 6}}}

def selectData():
    datas = []
    for byteNo, regData in name_dict.items():
        for regName, regValues in regData.items():
            position = regValues['position']
            length = regValues['length']
            byteHex = hex(int(byteNo))[2:]
            datas.append([regName, str(byteNo), byteHex, str(position), str(length), ''])

    return datas


def mergeData(name_dict):
    DEC = []
    HEX = []
    DATA = []
    for byteNo, regName_dict in name_dict.items():
        byteHex = ['0'] * 8  # Initialize byteHex as a list of '0's
        DEC.append(byteNo)
        HEX.append(hex(byteNo)[2:])
        for regName, regName_data in regName_dict.items():
            position, length = regName_data['position'], regName_data['length']
            data = f"{regName_data['data']:0{length}b}"  # Convert data to binary with fixed length

            # Ensure start position is within the list bounds
            start = max(0, 8 - (position + 1))
            end = start + length
            # Update byteHex with the data, considering its length
            byteHex[start:end] = data.zfill(length)  # Pad with '0' to ensure the correct length

        final_hex = f"{int(''.join(byteHex), 2):02X}"
        DATA.append(final_hex)

    return DEC, HEX, DATA

#
# if __name__ == '__main__':
#     name_dict = {
#         0: {'cfg_otp_flag': {'position': 7, 'length': 8, 'data': 10}},
#         1: {'trim_iref': {'position': 5, 'length': 6, 'data':12}},44: {'tm_vnegdis': {'position': 0, 'length': 1, 'data': 1},
#          'tm_vpphdis': {'position': 1, 'length': 1, 'data': 0},
#          'tm_vrefvppy2vcc': {'position': 2, 'length': 1, 'data': 1},
#          'tm_vwl2vcc': {'position': 3, 'length': 1, 'data': 1}},
#                                                                        23: {
#                                                                            'trim_vwl_set': {'position': 5, 'length': 1,
#                                                                                             'data': 1},
#                                                                            'cfg_vnegpmp_set_add1': {'position': 6,
#                                                                                                     'length': 1,
#                                                                                                     'data': 1},
#                                                                            'cfg_vnegpmp_set_add2': {'position': 7,
#                                                                                                     'length': 1,
#                                                                                                     'data': 1}}
#
#
#     }
#     mergeData(name_dict)